/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import negocio.Alquiler;
import negocio.Cliente;
import java.util.*;
import negocio.ArticuloAlquilado;
import negocio.Proveedor;
import negocio.Tarifa;

/**
 *
 * @author JAVA
 */
public class PersistenciaAlquiler {

    /*
     * creaAlquiler, introduce un alquiler en la base de datos, el Alquiler está asociado a un Cliente. Hay que insertar previamente
     * el Alquiler en la lista de alquileres del Cliente, si no, no se introducirá en la base de datos
     */
    public static void crearAlquiler(Alquiler alq) {
        Connection con = null;
        Statement st = null;
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String falquiler = "";
        String ffin = "";
        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
            st = con.createStatement();
            Iterator it = alq.getListArt().iterator();
            while (it.hasNext()) {
                ArticuloAlquilado art = (ArticuloAlquilado) it.next();
                falquiler = sdf.format(art.getFechaAlquiler());
                ffin = sdf.format(art.getFechaEntrega());
                st.executeUpdate("insert into alquiler (id,idcliente,idarticulo,fechaalquiler,fechafin) values "
                        + "(0," + alq.getCli().getId() + "," + art.getId() + ",'" + falquiler + "','" + ffin + "')");
                ponerArticuloNoDisponible(art);
            }
            st.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public static int ponerArticuloNoDisponible(ArticuloAlquilado aa){
        int i=0;
        Connection con = null;
        Statement st = null;        
        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
            st = con.createStatement();
            i=st.executeUpdate("update articulo set disponible=0 where articulo.id="+aa.getId());
            st.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        }
        return i;
    }

    public static int ponerArticuloDisponible(ArticuloAlquilado aa){
        int i=0;
        Connection con = null;
        Statement st = null;        
        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
            st = con.createStatement();
            i=st.executeUpdate("update articulo set disponible=1 where articulo.id="+aa.getId());
            st.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PersistenciaPromocion.class.getName()).log(Level.SEVERE, null, ex);
        }
        return i;
    }
    
    public static int devolverArticulo(Alquiler alq, ArticuloAlquilado aa) {

        int i = 0;
        Connection con = null;
        Statement st = null;
        try {
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
                st = con.createStatement();
                i = st.executeUpdate("update alquiler set devuelto=1 where alquiler.idarticulo=" + aa.getId() + " and alquiler.devuelto=0 and alquiler.idcliente=" + alq.getCli().getId());
                ponerArticuloDisponible(aa);
            } catch (SQLException ex) {
                Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                st.close();
                con.close();

            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return i;
        }
    }

    public static List<ArticuloAlquilado> obtenerArticulosAlquilados(Cliente c) {
        List<ArticuloAlquilado> lista = new ArrayList<ArticuloAlquilado>();
        ArticuloAlquilado a = null;
        Connection con = null;
        Statement st = null;
        Proveedor p1 = null;
        Tarifa t1 = null;
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
            st = con.createStatement();

            ResultSet r = st.executeQuery("select articulo.id,fechaalta,idproveedor,idtarifa,disponible,sevende,titulo,valoracion,alquiler.fechaalquiler,alquiler.fechafin from articulo inner join alquiler on articulo.id=alquiler.idarticulo and alquiler.devuelto=0 and alquiler.idcliente=" + c.getId());
            while (r.next()) {
                p1 = PersistenciaProveedor.obtenerProveedor(r.getInt("idproveedor"));
                t1 = PersistenciaTarifa.obtenerTarifa(r.getInt("idtarifa"));
                a = new ArticuloAlquilado(r.getInt("id"), r.getDate("fechaalta"), p1, r.getBoolean("disponible"), t1, r.getBoolean("sevende"), r.getFloat("valoracion"), r.getString("titulo"), r.getDate("fechaalquiler"), r.getDate("fechafin"));
                lista.add(a);
            }
            st.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        }

        return lista;
    }

    public static ArticuloAlquilado obtenerArticuloAlquilado(int id) {
        ArticuloAlquilado aa = null;
        Connection con = null;
        Statement st = null;
        Proveedor p1 = null;
        Tarifa t1 = null;
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
            st = con.createStatement();

            ResultSet r = st.executeQuery("select articulo.id,fechaalta,idproveedor,idtarifa,disponible,sevende,titulo,valoracion,alquiler.fechafin,alquiler.fechaalquiler from articulo inner join alquiler on articulo.id=alquiler.idarticulo and alquiler.devuelto=0 and articulo.id=" + id);
            while (r.next()) {
                p1 = PersistenciaProveedor.obtenerProveedor(r.getInt("idproveedor"));
                t1 = PersistenciaTarifa.obtenerTarifa(r.getInt("idtarifa"));
                aa = new ArticuloAlquilado(r.getInt("articulo.id"), r.getDate("fechaalta"), p1, r.getBoolean("disponible"), t1, r.getBoolean("sevende"), r.getFloat("valoracion"), r.getString("titulo"), r.getDate("fechaalquiler"), r.getDate("fechafin"));
            }
            st.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PersistenciaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return aa;
        }
    }

    /*
    public static TreeMap<Integer, ArrayList<Articulo>> vecesAlquilados() {
    int i = 0;
    Statement st = null;
    Connection con = null;
    TreeMap<Integer, ArrayList<Articulo>> mapaArticulos = new TreeMap<Integer, ArrayList<Articulo>>();
    
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    
    
    HashSet<Articulo> setAlquiler = new HashSet<Articulo>();
    ArrayList<Alquiler> listaAlquiler = new ArrayList<Alquiler>();
    ResultSet rset = st.executeQuery("Select id,idcliente,idarticulo,fechaAlquiler,fechaFin,devuelto from Alquiler");
    while (rset.next()) {
    Articulo articulo = dameArticulo(rset.getInt("idarticulo"));
    Alquiler alquiler = new Alquiler(rset.getInt("id"), rset.getDate("fechaAlquiler"), rset.getDate("fechaFin"), articulo);
    listaAlquiler.add(alquiler);
    }
    //ArrayList<Alquiler> listaAa=new ArrayList<Alquiler>();
    //listaAa.addAll(listaAlquiler);
    int contador = 0;
    for (Alquiler a : listaAlquiler) {
    contador = 0;
    if (!setAlquiler.contains(a.getArticulo())) {
    setAlquiler.add(a.getArticulo());
    Articulo artic = a.getArticulo();
    for (Alquiler aa : listaAlquiler) {
    if (aa.getArticulo().getId() == (artic.getId())) {
    contador++;
    }
    }
    if (mapaArticulos.containsKey(contador)) {
    mapaArticulos.get(contador).add(artic);
    } else {
    ArrayList<Articulo> listaArticulos = new ArrayList<Articulo>();
    listaArticulos.add(artic);
    mapaArticulos.put(contador, listaArticulos);
    }
    }
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return mapaArticulos;
    }
    }
    int contador = 0;
    
    for (Alquiler a : listaAlquiler
    
    
    ) {
    contador = 0;
    if (!setAlquiler.contains(a.getArticulo())) {
    setAlquiler.add(a.getArticulo());
    Articulo artic = a.getArticulo();
    for (Alquiler aa : listaAlquiler) {
    if (aa.getArticulo().equals(artic)) {
    contador++;
    }
    }
    if (mapaArticulos.containsKey(contador)) {
    mapaArticulos.get(contador).add(artic);
    } else {
    ArrayList<Articulo> listaArticulos = new ArrayList<Articulo>();
    listaArticulos.add(artic);
    mapaArticulos.put(contador, listaArticulos);
    }
    }
    }
    }
    
    
    catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class  
    
    .getName()).log(Level.SEVERE, null, ex);
    } 
    
    catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class  
    
    .getName()).log(Level.SEVERE, null, ex);
    } 
    
    catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class  
    
    .getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    
    
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class  
    
    .getName()).log(Level.SEVERE, null, ex);
    }
    
    
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class  
    
    .getName()).log(Level.SEVERE, null, ex);
    } finally {
    return mapaArticulos;
    }
    }
    
    /*
     * alquiladosNunca devuelve una Lista de Articulos que no han sido alquilados nunca
     */
    /*
    public static ArrayList<Articulo> alquiladosNunca() {
    int i = 0;
    Statement st = null;
    Connection con = null;
    ArrayList<Articulo> listaTodos = new ArrayList<Articulo>();
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    ArrayList<Articulo> listaAlqui = new ArrayList<Articulo>();
    ResultSet rset = st.executeQuery("Select id,idcliente,idarticulo,fechaAlquiler,fechaFin,devuelto from Alquiler");
    while (rset.next()) {
    Articulo articulo = dameArticulo(rset.getInt("idarticulo"));
    listaAlqui.add(articulo);
    }
    listaTodos = dameTodosArticulos();
    listaTodos.removeAll(listaAlqui);
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return listaTodos;
    }
    }
    
    /*
     * alquileresPendientes devuelve un Mapa<Alquiler,Cliente>, donde Alquiler contiene alquileres pendientes, y Cliente contiene el Cliente al que 
     * corresponde el Alquiler
     */
    /*
    public static HashMap<Alquiler, Cliente> alquileresPendientes() {
    int i = 0;
    Statement st = null;
    Connection con = null;
    HashMap<Alquiler, Cliente> mapa = new HashMap<Alquiler, Cliente>();
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    ResultSet rset = st.executeQuery("Select id,idcliente,idarticulo,fechaAlquiler,fechaFin,devuelto from Alquiler where Alquiler.devuelto='0'");
    while (rset.next()) {
    Articulo articulo = dameArticulo(rset.getInt("idarticulo"));
    Cliente cliente = dameCliente(rset.getInt("idcliente"));
    Alquiler alquiler = new Alquiler(rset.getInt("id"), rset.getDate("fechaAlquiler"), rset.getDate("fechaFin"), articulo);
    mapa.put(alquiler, cliente);
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return mapa;
    }
    }
    /*
     * obtenerListaAlquileres devuelve la Lista de Alquileres Pendientes de un Cliente determinado
     */
    /*
    public static List<Alquiler> obtenerListaAlquileres(Cliente c) {
    List<Alquiler> lalq = new ArrayList<Alquiler>();
    try {
    Connection con = null;
    Statement st = null;
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    ResultSet r = st.executeQuery("select id,idarticulo,fechaAlquiler,fechaFin from alquiler where alquiler.idcliente=" + c.getId() + " and alquiler.devuelto=0");
    while (r.next()) {
    Articulo art = dameArticulo(r.getInt("idarticulo"));
    //Articulo art=PersistenciaArticulo.obtenerArticulo(r.getInt("idarticulo"));
    Alquiler alq = new Alquiler(r.getInt("id"), r.getDate("fechaAlquiler"), r.getDate("fechaFin"), art);
    lalq.add(alq);
    }
    r.close();
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaProveedor.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaProveedor.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaProveedor.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaProveedor.class.getName()).log(Level.SEVERE, null, ex);
    }
    return lalq;
    }
    /*
     * mejoresClientes devuelve un Mapa<Integer,Lista de Clientes>, donde Integer es las veces que Alquilan, y en Lista de Clientes los clientes que han
     * alquilado tantas veces
     */
    /*
    public static TreeMap<Integer, ArrayList<Cliente>> mejoresClientes() {
    Statement st = null;
    Connection con = null;
    TreeMap<Integer, ArrayList<Cliente>> mapaClientes = new TreeMap<Integer, ArrayList<Cliente>>();
    
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    ArrayList<Cliente> listaCliente = new ArrayList<Cliente>();
    HashSet<Cliente> setCliente = new HashSet<Cliente>();
    ResultSet rset = st.executeQuery("Select id,idcliente,idarticulo,fechaAlquiler,fechaFin,devuelto from Alquiler");
    while (rset.next()) {
    Cliente cliente = dameCliente(rset.getInt("idcliente"));
    listaCliente.add(cliente);
    }
    int contador = 0;
    for (Cliente cliente : listaCliente) {
    contador = 0;
    if (!setCliente.contains(cliente)) {
    setCliente.add(cliente);
    for (Cliente cc : listaCliente) {
    if (cliente.getId() == cc.getId()) {
    contador++;
    }
    }
    if (mapaClientes.containsKey(contador)) {
    mapaClientes.get(contador).add(cliente);
    } else {
    ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();
    listaClientes.add(cliente);
    mapaClientes.put(contador, listaClientes);
    }
    }
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return mapaClientes;
    }
    }
    
    public static ArrayList<Articulo> dameTodosArticulos() {
    Statement st = null;
    Connection con = null;
    ArrayList<Articulo> lista = new ArrayList<Articulo>();
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    
    ResultSet rset = st.executeQuery("Select id from Articulo where Articulo.tipo='Pelicula' or Articulo.tipo='Juego' and Articulo.baja=0");
    while (rset.next()) {
    Articulo articulo = dameArticulo(rset.getInt("id"));
    lista.add(articulo);
    }
    
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return lista;
    }
    }
    /*
     * dameProveedor devuelve un Proveedor determinado a partir de su Id (Id de Proveedor)
     */
    /*
    public static Proveedor dameProveedor(int id) {
    Statement st = null;
    Connection con = null;
    Proveedor prove = null;
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    
    ResultSet rset = st.executeQuery("Select id,nombre from Proveedor where Proveedor.id='" + id + "' and Proveedor.baja=0");
    while(rset.next()){
    prove = new Proveedor(rset.getInt("id"), rset.getString("nombre"));
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return prove;
    }
    }
    /*
     * dameTarifa devuelve una Tarifa determinada a partir de su Id (Id de Tarifa)
     */
    /*
    public static Tarifa dameTarifa(int id) {
    Statement st = null;
    Connection con = null;
    Tarifa t = null;
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    
    ResultSet rset = st.executeQuery("Select id,descripcion,precioAlquiler,precioVenta,diasAlquiler,baja from Tarifa where Tarifa.id='" + id + "' and Tarifa.baja=0");
    while(rset.next()){
    t = new Tarifa(rset.getInt("id"), rset.getString("descripcion"), rset.getFloat("precioAlquiler"), rset.getFloat("precioVenta"), rset.getInt("diasAlquiler"));
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return t;
    }
    }
    /*
     * dameArticulo devuelve un Articulo determinado a partir de su Id (Id de articulo)
     */
    /*
    public static Articulo dameArticulo(int id) {
    Statement st = null;
    Connection con = null;
    Articulo articulo = null;
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    
    ResultSet rset = st.executeQuery("Select id,fechaalta,idproveedor,disponible,sevende,baja,titulo,genero,ano,duracion,actores,valoracion,edadMinima,director,soporte,idtarifa,tipo from Articulo where Articulo.id='" + id + "' and Articulo.baja=0 and Articulo.tipo='Juego' or Articulo.tipo='Pelicula'");
    rset.next();
    Tarifa t = dameTarifa(rset.getInt("idtarifa"));
    Proveedor p = dameProveedor(rset.getInt("idproveedor"));
    String tipo = rset.getString("tipo");
    if (tipo.equals("Pelicula")) {
    Pelicula peli = new Pelicula(rset.getInt("id"), rset.getDate("fechaAlta"), p, rset.getBoolean("disponible"), t, rset.getString("titulo"), rset.getString("genero"), rset.getInt("ano"), rset.getInt("duracion"), rset.getString("actores"), rset.getFloat("valoracion"), rset.getInt("edadMinima"), rset.getString("director"), rset.getBoolean("sevende"));
    articulo = peli;
    }
    if (tipo.equals("Juego")) {
    Juego juego = new Juego(rset.getInt("id"), rset.getDate("fechaAlta"), p, rset.getBoolean("disponible"), t, rset.getString("titulo"), rset.getString("soporte"), rset.getInt("edadMinima"), rset.getString("genero"), rset.getFloat("valoracion"), rset.getBoolean("sevende"));
    articulo = juego;
    }
    
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return articulo;
    }
    
    }
    /*
     * dameCliente devuelve un Cliente determinado a partir de su Id (Id de Cliente)
     */
    /*
    public static Cliente dameCliente(int id) {
    Statement st = null;
    Connection con = null;
    Cliente cliente = null;
    try {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    ResultSet rset = st.executeQuery("Select id,nombre,apellidos,dni,domicilio,telefono,email,vip,nombreusuario,pin,baja,saldo from Cliente where Cliente.id=" + id + " and Cliente.baja=0");
    while (rset.next()) {
    int ide = rset.getInt("id");
    String nombre = rset.getString("nombre");
    String apellidos = rset.getString("apellidos");
    String dni = rset.getString("dni");
    String domicilio = rset.getString("domicilio");
    String telefono = rset.getString("telefono");
    String email = rset.getString("email");
    boolean vip = rset.getBoolean("vip");
    String apodo = rset.getString("nombreusuario");
    int pin = rset.getInt("pin");
    float saldo = rset.getFloat("saldo");
    cliente = new Cliente(ide, nombre, apellidos, dni, domicilio, telefono, email, apodo, pin);
    cliente.setVip(vip);
    cliente.setSaldo(saldo);
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return cliente;
    }
    
    }
    
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    return cliente;
    }
    
    }
    
    public static TreeMap<Integer,ArrayList<Articulo>> masVecesAlquilados(){
    Statement st = null;
    Connection con = null;
    Articulo art=null;
    TreeMap<Integer,ArrayList<Articulo>> lista = new TreeMap<Integer, ArrayList<Articulo>>();
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://192.168.1.18/videoclub", "cibernos", "1234");
    st = con.createStatement();
    ResultSet rset = st.executeQuery("select count(*) as count,articulo.id,fechaAlta,idproveedor,disponible,sevende,baja,titulo,genero,ano,duracion,actores,valoracion,edadminima,director,soporte,idtarifa,tipo from Alquiler inner join Articulo  on alquiler.idarticulo=articulo.id and articulo.baja=0 group by articulo.titulo");
    while (rset.next()) {
    Proveedor prov=PersistenciaProveedor.obtenerProveedor(rset.getInt("idproveedor"));
    Tarifa t=PersistenciaTarifa.obtenerTarifa(rset.getInt("idtarifa"));
    if(rset.getString("tipo").compareTo("Pelicula")==0){
    art=new Pelicula(rset.getInt("articulo.id"),rset.getDate("fechaAlta"),prov, rset.getBoolean("disponible"), t, rset.getString("titulo"), rset.getString("genero"), rset.getInt("ano"), rset.getInt("duracion"), rset.getString("actores"), rset.getFloat("valoracion"), rset.getInt("edadminima"), rset.getString("director"), rset.getBoolean("sevende"));
    }
    else if(rset.getString("tipo").compareTo("Juego")==0){
    art=new Juego(rset.getInt("articulo.id"), rset.getDate("fechaAlta"), prov, rset.getBoolean("disponible"), t, rset.getString("titulo"), rset.getString("soporte"), rset.getInt("edadminima"), rset.getString("genero"),rset.getFloat("valoracion"), rset.getBoolean("sevende"));
    }                    
    if(lista.containsKey(rset.getInt("count"))){
    lista.get(rset.getInt("count")).add(art);
    }else{
    ArrayList<Articulo> articulo=new ArrayList<Articulo>();
    articulo.add(art);
    lista.put(rset.getInt("count"), articulo);
    }
    
    
    
    }                                
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(PersistenciaAlquiler.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
    try {
    st.close();
    con.close();
    } catch (SQLException ex) {
    Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    return lista;
    }
     */
    public static TreeMap<Integer, ArrayList<Cliente>> mejoresClientes() {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
